package facade;

/**
 * 1. 简单介绍一下外观模式(中介者)的定义，是为了做什么的 ?
 *  一个对象依赖一系列外部对象时, 有个中间把所有外部对象包装起来, 这样只需要调用一次即可
 *
 * 2. 有没有什么实例
 *     平时都用的到的 --> main: input --> process --> write; 其中 process --> clean, process1, process2 ...
 *
 * 3. 优缺点是什么
 *  优点:
 *      更方便, 不用反复调用那么多;
 *      而且代码可读性更强;
 *  缺点:
 *      违反开闭原则, 新增或废弃其中的一个子 process 都需要修改;
 *
 */

public class FacadePattern {

    public static void main(String[] args) {
        //使用外观模式前
        Process1 process1 = new Process1();
        Process2 process2 = new Process2();
        Process3 process3 = new Process3();

        process1.process();
        process2.process();
        process3.process();

        System.out.println();

        //使用外观模式后
        Facade facade = new Facade();
        facade.executeWork();
    }
}

class Process1 {
    void process() {
        System.out.println("这是工作流程1");
    }
}

class Process2 {
    void process() {
        System.out.println("这是工作流程2");
    }
}

class Process3 {
    void process() {
        System.out.println("这是工作流程3");
    }
}

class Facade {
    private Process1 process1 = new Process1();
    private Process2 process2 = new Process2();
    private Process3 process3 = new Process3();

    void executeWork() {
        process1.process();
        process2.process();
        process3.process();
    }
}